﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MySql.Data.MySqlClient;
using System.Data;
using System.Windows.Forms;

namespace IAPM_GPC_dll
{
    public class ClassConnect
    {


        public ClassConnect()
        {

        }
        #region champs statiques

        public static MySqlConnection maConnexion = new MySqlConnection();
        public static MySqlCommand maCommandeSpecialRequete = new MySqlCommand();
        public static MySqlDataAdapter monRemplisseur = new MySqlDataAdapter();
        public static DataSet monJeuDeDonnees = new DataSet();
        public static string maRequete;
        public static DataGridView monDatagird = new DataGridView();
        public static string maChaine = "Server=localhost;Database=ppe2_iapm_tp_groupe;Uid=root;";

        #endregion

        #region méthodes Connect

        public static void seConnecter()
        {
            maConnexion.ConnectionString = maChaine;
            maConnexion.Open();
            maCommandeSpecialRequete.CommandType = CommandType.Text;
            maCommandeSpecialRequete.Connection = maConnexion;
        }

        public static void seDeconnecter()
        {
            maConnexion.Close();
        }

        #endregion

        public static void ViderVue(string chaine)
        {
            if (monJeuDeDonnees.Tables[chaine] != null)
            {
                monJeuDeDonnees.Tables[chaine].Clear();
            }
        }



        #region Requête SELECT et Actions

        public static int Generer_Cle_Primaire(string nomcle, string nomtable)
        {
            maCommandeSpecialRequete.CommandText = "Select Max("+ nomcle + ") From " + nomtable;
            try
            {
                return (Convert.ToInt16(maCommandeSpecialRequete.ExecuteScalar()))+1;
            }
            catch (Exception)
            {

                return 0;
            }
            


        }
        public static void Executer_Requete_Action( string marequeteaction )
            {
                try 
	            {	        
		            maCommandeSpecialRequete.CommandText = marequeteaction;
                    maCommandeSpecialRequete.ExecuteNonQuery();
	            }
	            catch (Exception ex)
	            {
		            MessageBox.Show("Erreur... Contacter votre Administrateur système : " + ex.Message);
		            throw;
	            }
            }
            
        #endregion
        public static DataTable Executer_Requete_Select(string marequeteselect, string vue) 
        {
            DataTable result = new DataTable();
            try 
	        {	        
		            maCommandeSpecialRequete.CommandText = marequeteselect;
                    monRemplisseur.SelectCommand = maCommandeSpecialRequete;
                    monRemplisseur.Fill(monJeuDeDonnees, vue);
	        }
	        catch (Exception ex)
	        {
                MessageBox.Show("Erreur... Contacter votre Administrateur système : " + ex.Message);
		        throw;
	        }
            result = monJeuDeDonnees.Tables[vue];
            
            return result;
        }

       
            /// <summary>
        /// Chargement d'un data grid a partir d'une requete
        /// </summary>
        /// <param name="mondata">Name DataGridView</param>
        /// <param name="requete"></param>
        /// <param name="vue">Vue où est stocker le résultat</param>
        public static void Chargement_DataGrid(DataGridView mondata, string requete, string vue)
        {
            ViderVue(vue);
            mondata.DataSource = Executer_Requete_Select(requete, vue);
            
        }

        /// <summary>
        /// Chargement d'un ComboBox avec les requete et les valeur en parametre
        /// </summary>
        /// <param name="combo">Name ComboBox</param>
        /// <param name="requete"></param>
        /// <param name="vue">Vue où est stocker le résultat</param>
        /// <param name="valueMember">Valeur reel</param>
        /// <param name="displayMemeber">Valeur affiché</param>
        public static void Chargement_ComboBox(ComboBox combo, string requete, string vue, string valueMember, string displayMemeber)
        {
            ViderVue(vue);
            
            combo.DisplayMember = displayMemeber;
            combo.ValueMember = valueMember;
            combo.DataSource = Executer_Requete_Select(requete, vue);
            
        }
    }
}
